extends Camera2D

# 基础配置
@export var target_rotation_deg: float = 0.0  # 初始目标旋转角度（度，即初始水平基准）
@export var rotation_duration: float = 0.75    # 单次旋转过渡时间（秒）
@export var interval: float = 2.0             # 旋转间隔（秒）
@export var min_rotate_deg: float = 5.0        # 最小单次旋转角度（度）
@export var max_rotate_deg: float = 45.0       # 最大单次旋转角度（度）
@export var max_total_offset_deg: float = 60.0 # 相对于初始水平的最大总偏移（度）

var initial_base_rotation: float = 0.0  # 初始水平基准角度（弧度）
var current_rotation: float = 0.0       # 相机当前旋转角度（弧度）

func _ready() -> void:
	# 相机基础配置（确保旋转生效）
	ignore_rotation = false
	anchor_mode = Camera2D.ANCHOR_MODE_DRAG_CENTER  # 中心锚点（旋转必备）
	enabled = true

	# 初始化基准角度（将 target_rotation_deg 作为“初始水平位置”）
	initial_base_rotation = deg_to_rad(target_rotation_deg)
	current_rotation = initial_base_rotation  # 初始旋转到基准位置
	rotation = current_rotation

	# 启动定时旋转（延迟 interval 秒后执行，之后每隔 interval 秒重复）
	await get_tree().create_timer(interval).timeout
	start_random_rotation_loop()

func start_random_rotation_loop() -> void:
	# 递归实现定时重复（比 _process 更精准，避免delta累积误差）
	random_rotate_once()
	await get_tree().create_timer(interval).timeout
	start_random_rotation_loop()

func random_rotate_once() -> void:
	# 1. 随机生成旋转方向（-1=逆时针，1=顺时针）
	var rotate_direction = -1 if randi() % 2 == 0 else 1

	# 2. 随机生成单次旋转角度（5~45度，转换为弧度）
	var random_deg = randf_range(min_rotate_deg, max_rotate_deg)
	var random_rad = deg_to_rad(random_deg)

	# 3. 计算目标旋转角度（方向 × 角度）
	var target_rotation = current_rotation + (rotate_direction * random_rad)

	# 4. 限制目标角度：不超过初始水平位置 ±45度
	var min_allowed = initial_base_rotation - deg_to_rad(max_total_offset_deg)
	var max_allowed = initial_base_rotation + deg_to_rad(max_total_offset_deg)
	target_rotation = clamp(target_rotation, min_allowed, max_allowed)

	# 5. 执行平滑旋转过渡
	var tween = create_tween()
	tween.tween_property(self, "rotation", target_rotation, rotation_duration)

	## 6. 更新当前旋转角度（用于下一次计算）
	#current_rotation = target_rotation
	#print(current_rotation)
